package service

import (
	"fmt"
	"os"
	"path/filepath"
	"sort"
)

// RenameForDirPath 重命名文件夹里的文件
// @param dirPath 文件夹的跟路径
// @param prefix 新文件名的前缀
// @param digit 顺序号的位数
// @param initial 顺序号的起始值
// 例如，如果 prefix 为 "file_", digit 为 5, initial 为 1，则生成的文件名可能是 "file_00001", "file_00002" 等。
func RenameForDirPath(dirPath string, prefix string, digit int, initial int) {
	filePaths := getFilePaths(dirPath, false)
	Rename(filePaths, prefix, digit, initial)
}

// Rename 重命名文件
// @param filePaths 文件集合 文件的全路径
// @param prefix 新文件名的前缀
// @param digit 顺序号的位数
// @param initial 顺序号的起始值
// 例如，如果 prefix 为 "file_", digit 为 5, initial 为 1，则生成的文件名可能是 "file_00001", "file_00002" 等。
func Rename(filePaths []string, prefix string, digit int, initial int) {
	for i := range filePaths {
		filePath := filePaths[i]
		ext := filepath.Ext(filePath)
		//filename := strings.TrimSuffix(filepath.Base(filePath), ext)
		newFilename := fmt.Sprintf("%s%0*d%s", prefix, digit, initial+i, ext)
		newFilePath := filepath.Join(filepath.Dir(filePath), newFilename)
		err := os.Rename(filePath, newFilePath)
		if err != nil {
			fmt.Printf("Error renaming file %s to %s: %v\n", filePath, newFilePath, err)
			return
		}
		fmt.Printf("Renamed: %s to %s\n", filePath, newFilePath)
	}
}

func getFilePaths(dirPath string, r bool) []string {
	var files []string
	_ = filepath.Walk(dirPath, func(path string, info os.FileInfo, _ error) error {
		if info.IsDir() {
			if !r && path != dirPath {
				return filepath.SkipDir
			}
			return nil
		}
		files = append(files, path)
		return nil
	})
	sort.Slice(files, func(i, j int) bool {
		return filepath.Base(files[i]) < filepath.Base(files[j])
	})
	return files
}
